/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.Chofer;
import Modelo.Listas;
import Modelo.Socio;
import Vista.JFrameChoferes;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;

public class ControladorChoferes implements ActionListener, KeyListener {

    private JFrameChoferes formChoferes;
    private Listas list;

    public ControladorChoferes(Listas lis) {
        list = lis;
        formChoferes = new JFrameChoferes();
        formChoferes.agregarListener(this, this);
        formChoferes.setVisible(true);
        Enabled(false);
        LlenarComboSocio();

    }

    //-----------------------------------------
    //Funciona cuando se hace click en un boton
    //------------------------------------------
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formChoferes.getBtnSalirCH())) {
            formChoferes.dispose();
        }

        if (e.getSource().equals(formChoferes.getBtnBuscarCH())) {
            new ControladorConsulChoferes(list);
        }
        if (e.getSource().equals(formChoferes.getBtnGuardarCH())) {
            Grabar();
        }
        if (e.getSource().equals(formChoferes.getBtnEliminarCH())) {
            Limpiar();
            Enabled(false);
        }
        if(e.getSource().equals(formChoferes.getCmbSocios()))
            ComboSocios();
    }
    //------------------------------------------------------------
    //Funciona cuando se introduce un caracter en una caja de texto
    //-------------------------------------------------------------
    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {
            CedulaKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtNombreCh())) {
            NombresKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtTelefonoCh())) {
            TelefonoKeyTyped(e);
        }
        if (e.getSource().equals(formChoferes.getTxtDireccionCh())) {
            DireccionKeyTyped(e);
        }
    }
    //-------------------------------------------------------------------------------
    //Funciona cuando se presiona una tecla que realiza alguna funcion, Ejemplo Enter
    //-------------------------------------------------------------------------------
    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {

            CedulakeyPressed(e);
        }
        if (e.getSource().equals(formChoferes.getTxtNombreCh())) {
            NombreskeyPressed(e);
        }
        if (e.getSource().equals(formChoferes.getTxtDireccionCh())) {
            DireccionkeyPressed(e);
        }
    }
    //----------------------------------------------
    //Funciona cuando se suelta una tecla
    //----------------------------------------------
    @Override
    public void keyReleased(KeyEvent e) {

    }

    //----------------------------------  
    //Hacer editables las cajas de texto
    //----------------------------------
    private void Enabled(boolean Status) {
        formChoferes.getTxtCedulaCh().setEnabled(!Status);
        formChoferes.getTxtNombreCh().setEnabled(Status);
        formChoferes.getTxtDireccionCh().setEnabled(Status);
        formChoferes.getTxtTelefonoCh().setEnabled(Status);
    }

    //-----------------------------------------
    //Limpia el contenido de las cajas de texto
    //------------------------------------------
    private void Limpiar() {
        formChoferes.getTxtCedulaCh().setText("");
        formChoferes.getTxtNombreCh().setText("");
        formChoferes.getTxtDireccionCh().setText("");
        formChoferes.getTxtTelefonoCh().setText("");
        formChoferes.getTxtCISocio().setText("");
        formChoferes.getTxtCodCoop().setText("");
        formChoferes.getCmbSocios().setSelectedIndex(-1);
    }

    //-----------------------------------------------
    //Ingresa un nuevo chofer en la lista de choferes
    //------------------------------------------------
    private void Grabar() {
        Chofer choferes = new Chofer();
        String Cadena;

        Cadena = formChoferes.getTxtCedulaCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Cedula Vacia", "");
            formChoferes.getTxtCedulaCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtNombreCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Nombre Vacio", "");
            formChoferes.getTxtNombreCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtDireccionCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Direccion Vacia", "");
            formChoferes.getTxtDireccionCh().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getTxtTelefonoCh().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Telefono vacio", "");
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            return;
        }
        if (Cadena.length() != 11) {
            Mensajes.Aviso("Telefono invalido", "");
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            return;

        }
        Cadena = formChoferes.getTxtCISocio().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("CI Socio vacia", "");
            formChoferes.getCmbSocios().requestFocusInWindow();
            return;
        } 
        Cadena = formChoferes.getTxtCodCoop().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Codigo de Cooperativa vacio", "");
            formChoferes.getCmbSocios().requestFocusInWindow();
            return;
        } 

        choferes.Choferes(formChoferes.getTxtCedulaCh().getText(),
                formChoferes.getTxtNombreCh().getText(),
                formChoferes.getTxtDireccionCh().getText(),
                formChoferes.getTxtTelefonoCh().getText(),
                formChoferes.getTxtCISocio().getText(),
                formChoferes.getTxtCodCoop().getText());

        list.getListaChoferes().add(choferes);
        Mensajes.Aviso("Chofer guardado con exito", "");
        Limpiar();
        Enabled(false);
        formChoferes.getTxtCedulaCh().requestFocusInWindow();
    }
    //---------------------------------------------
    //Llena el combo de los socios
    //---------------------------------------------
    private void LlenarComboSocio() 
    {
        formChoferes.getCmbSocios().removeAllItems();
        formChoferes.getCmbSocios().addItem("Seleccione Socio");
        String datoSocio;
        for (int i = 0; i < list.getListaSocio().size(); i++) {
            datoSocio = "CI: " + list.getListaSocio().get(i).getCedula() + " " + list.getListaSocio().get(i).getNombre();
            formChoferes.getCmbSocios().addItem(datoSocio);
        }
        formChoferes.getCmbSocios().setSelectedIndex(0);
    }
    //----------------------------------------------------------------------------
    //Se activa al hacer click en el combo y llena los txt de ciSocio y Cod Coop
    //---------------------------------------------------------------------------
        private void ComboSocios() 
    {
        if (formChoferes.getCmbSocios().getSelectedIndex() > 0) {
            String dato, cedula;
            String[] arrSocio;
            dato = formChoferes.getCmbSocios().getSelectedItem().toString();
            arrSocio = dato.split(" ");
            cedula = arrSocio[1];
            int pos = -1;
            for (int i = 0; i < list.getListaSocio().size(); i++) {
                if (list.getListaSocio().get(i).getCedula().equals(cedula)) {
                    pos = i;
                }
            }
            if (pos != -1) {
                formChoferes.getTxtCISocio().setText(list.getListaSocio().get(pos).getCedula());
                formChoferes.getTxtCodCoop().setText(list.getListaSocio().get(pos).getCodCoop());
            } else {
                formChoferes.getTxtCISocio().setText("");
                formChoferes.getTxtCodCoop().setText("");
            }
        }
        if(formChoferes.getCmbSocios().getSelectedIndex() == 0)
        {
            formChoferes.getTxtCISocio().setText("");
            formChoferes.getTxtCodCoop().setText("");
        }
    }
    //---------------------------------------------------------------
    //Verifica si existe la cedula del chofer en la lista de choferes
    //----------------------------------------------------------------
    public int ExisteChofer(String CedCho) {
        int i = 0, Posi = -1;

        Chofer chofer;
        String CedLista;

        for (i = 0; i < list.getListaChoferes().size(); i++) {
            chofer = list.getListaChoferes().get(i);

            CedLista = chofer.getCedula();

            if (CedLista.equals(CedCho)) {
                Posi = i;
                return Posi;
            }

        }

        return Posi;
    }
                    //-----------------------------------------
                    //Metodos que validan las cajas de texto
                    //Serán llamados en los @Overwrite
                    //------------------------------------------
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void CedulaKeyTyped(KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getTxtCedulaCh().getText();
        if (Cadena.length() == 8) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void CedulakeyPressed(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getTxtCedulaCh())) {

            String Cadena;
            int PosiChofer;
            Chofer chofer = new Chofer();
            Cadena = formChoferes.getTxtCedulaCh().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 8) {
                Mensajes.Aviso("Cedula invalida", "");
                formChoferes.getTxtCedulaCh().requestFocusInWindow();
            }
            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 8) {

                PosiChofer = ExisteChofer(Cadena);
                if (PosiChofer >= 0) {
                    chofer = list.getListaChoferes().get(PosiChofer);
                    formChoferes.getTxtNombreCh().setText(chofer.getNombres());
                    formChoferes.getTxtDireccionCh().setText(chofer.getDireccion());
                    formChoferes.getTxtTelefonoCh().setText(chofer.getTelefonos());

                    Mensajes.Aviso("Chofer ya Existe", "");
                    Limpiar();

                } else {
                    Enabled(true);
                    formChoferes.getTxtNombreCh().requestFocusInWindow();

                }
            }

        }
    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void NombresKeyTyped(KeyEvent evt) 
    {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formChoferes.getTxtNombreCh().getText();
        if (Cadena.length() == 20) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }

    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void NombreskeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getTxtDireccionCh().requestFocusInWindow();
        }
    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void TelefonoKeyTyped(KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getTxtTelefonoCh().getText();
        if (Cadena.length() == 11) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void TelefonokeyPressed(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getTxtTelefonoCh())) {

            String Cadena;
            Cadena = formChoferes.getTxtCedulaCh().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 11) {
                Mensajes.Aviso("Telefono invalido", "");
                formChoferes.getTxtTelefonoCh().requestFocusInWindow();
            }
             if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 11) {
                formChoferes.getTxtTelefonoCh().requestFocusInWindow();
        }
      }
    }
    //-------------------------------------
    //Validaciones
    //-------------------------------------
    private void DireccionkeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getTxtTelefonoCh().requestFocusInWindow();
        }
    }
    //-------------------------------------
    private void DireccionKeyTyped(KeyEvent evt) 
    {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formChoferes.getTxtDireccionCh().getText();
        if (Cadena.length() == 30) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }

    }
    //-------------------------------------
}